#!usr/bin/env python3

#读取文件出现UnicodeDecodeError的解决办法

import os

root=os.path.abspath(os.curdir) #获取当前目录
filename = os.path.join(root,'5.xml')

'''
f = open(filename,'r')
#这里会报错 UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 78: illegal multibyte sequence
#错误信息:想通过gbk的方式去把字符串解码成Unicode
#原因是:由于文件本身是utf8格式的,但是我们读取文件的时候用了gbk的方式读取,这样把gbk解码成Unicode会出错
data = f.read() 
'''

#解决办法=>1
#在读取文件的时候用对应的编码去读取
f1 = open(filename,'r',encoding='utf-8') #指定读取方式是utf-8
data = f1.read() #读取内容
print(len(data)) #计算长度输出

#解决办法=>2
#以二进制的方式去读取,然后把读取出来的内容解码成对应编码的字符串

f1 = open(filename,'rb') #指定读取方式是utf-8
data = f1.read() #读取内容,二进制的
print(type(data)) #bytes类型
data = data.decode(encoding="utf-8") #把二进制的内容解码成对应的编码字符串
print(len(data)) #计算长度输出

#另外记录下python字符串和二进制字节组之间的转换

s1 = "Hello world"
bs1 = s1.encode() #转换成字节组
print(bs1.decode(encoding="utf-8")) #转换成字符串,encoding可选参数

print(str.encode(s1),bytes.decode(bs1)) #也可以直接用类方法

 